package editor3d;
import java.util.*;
public class TablaClase extends LinkedList <Clase>{

	/**
	* Inserta una nueva clase con tabla de simbolos
	*/
	public void addItem(Clase clas){
		add(clas);
	}

	/**
	* Busca la clase que contiene simbolos
	*/
	public Clase searchClase(String nombre){
		for(int i = 0; i<size(); i++){
			Clase clas = get(i);
			if(clas.getNombre().equals(nombre))
				return clas;
		}
		return null;
	}

	/**
	* Busca una variable global de una clase
	*/
	public Simbolo searchGlobal(String clase, String nombre){
		Clase clas = searchClase(clase);
		if(clas != null){
			TablaSimbolo simbolos = clas.getTabla();
			for(int i = 0; i< simbolos.size(); i++){
				Simbolo simbolo = simbolos.get(i);
				if(simbolo.getNombre().equals(nombre))
					return simbolo;
			}
		}
		return null;
	}

	/**
	* Busca un metodo dentro de una clase
	*/
	public Metodo searchMetodo(String clase, String nombre){
		Clase clas = searchClase(clase);
		if(clas != null){
			TablaMetodo metodos = clas.getMetodos();
			for(int i = 0; i< metodos.size(); i++){
				Metodo metodo = metodos.get(i);
				if(metodo.getNombre().equals(nombre))
					return metodo;
			}
		}
		return null;
	}

	/**
	* Busca un simbolo en un metodo de una clase
	*/
	public Simbolo searchSimbolo(String clase, String metodo, String nombre){
		Metodo met = searchMetodo(clase, metodo);
		if(met != null){
			TablaSimbolo simbolos = met.getSimbolos();
			for(int i = 0; i<simbolos.size(); i++){
				Simbolo simbolo = simbolos.get(i);
				if(simbolo.getNombre().equals(nombre))
					return simbolo;
			}
		}
		return null;
	}

	/**
	* Muestra la tabla de simbolos en un String
	*/
	@Override
	public String toString(){
		String temp = "";
		for(int i = 0; i< size(); i++)
			temp += "*************************\n"+get(i);
		return temp;
	}
}